<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
namespace Agp\CoreBundle\Manager;

use Doctrine\ORM\EntityManager;
use Agp\CoreBundle\Entity\Terminal;
use Agp\CoreBundle\Manager\BaseManager;
use Agp\CoreBundle\Entity\HabilitaProdutoTerminal;
use Agp\CoreBundle\Entity\AutorizadorValidacao;
use Doctrine\ORM\Query;
use Agp\CoreBundle\Entity\ListaPreco;
use Agp\CoreBundle\Entity\EventoTerminalEmpresa;

/**
 * Description of HabilitaProdutoTerminalManager
 *
 * @author bondcs
 */
class HabilitaProdutoTerminalManager extends BaseManager{
    
    public function remove($entity) {
        
        if ($entity->getListaPreco()->getTipo() == ListaPreco::TP_PASSAPORTE){
            $this->repository->clearByListasAndByTerminal($entity->getListaPreco(), $entity->getTerminalEmpresa());
        }
        
        if ($entity->getListaPreco()->getTipo() == ListaPreco::TP_SETOR){
            $this->container->get('agp.habilitaProdutoTerminal.repository')->clearByAmbienteAndByTerminal($entity->getListaPreco()->getAmbiente(), $entity->getTerminalEmpresa(), $entity->getEvento());
        }
        
        parent::remove($entity);
    }
    
    public function habilitaProdutoTerminal($lista, $terminalManager, $evento = null)
    {   
        $user = $this->container->get('security.context')->getToken()->getUser();
        $this->repository->clearProdutosHabilitados($terminalManager);
        foreach ($lista->getListaPrecoReference() as $listaPrecoReference){
            $habilita = $this->create();
            $habilita->setTerminalEmpresa($terminalManager)
                     ->setProdutoListaPreco($listaPrecoReference)
                     ->setEvento($evento == null ? $lista->getEvento(): $evento)
                     ->setEmpresa($user->getEmpresa());
            $this->persist($habilita);
        }

    }
    
    public function habilitaProdutoTerminalGrupo($terminais, $produtos, $evento, $limpa)
    {   
        $user = $this->container->get('security.context')->getToken()->getUser();
        foreach ($terminais as $terminalEmpresa){
            
            if ($limpa == true){
                $this->repository->clearProdutosHabilitados($terminalEmpresa, $user);
            }
            $i = 1;
            
            if ($evento == null){
                foreach ($produtos as $produto){
                   
                    $produtoListaPreco = $this->container->get("agp.produtoLista.manager")->findById($produto);

                    $habilita = $this->create();
                    $habilita->setTerminalEmpresa($terminalEmpresa)
                             ->setEvento($evento)
                             ->setOrdem($this->repository->getLastOrdem($terminalEmpresa)+1);   
                    $habilita->setLayout($terminalEmpresa->getLayout());
                    $habilita->setAtendente($terminalEmpresa->getAtendente());
                    $habilita->setEvento($terminalEmpresa->getEvento());
                    $habilita->setListaPreco($produtoListaPreco->getListaPreco());
                    $habilita->setProduto($produtoListaPreco->getProduto());
                    $habilita->setVlrProduto($produtoListaPreco->getVlrProduto());
                    $habilita->setLimiteVendas($produtoListaPreco->getLimiteVendas());
                    $habilita->setTipo(HabilitaProdutoTerminal::TP_BAR);
                    $habilita->setEmpresa($user->getEmpresa());
                    $this->persist($habilita);
                    
//                    if ($limpa == true){
//                        $this->repository->verificaProduto($produtoListaPreco->getProduto(), $terminalEmpresa);
//                        $this->persist($habilita);
//                    }else{
//                        $this->persist($habilita);
//                    }
                    $i++;
                }
            }else{
                
                $this->repository->clearProdutosHabilitadosBar($terminalEmpresa, $user);
                // IF TERMINAL ESTIVER FECHADO PARA O EVENTO, ATUALIZE PARA HABILITADO
                $this->container->get('doctrine')->getRepository("AgpCoreBundle:EventoTerminalEmpresa")->updateForHabilitado($terminalEmpresa, $evento);

                foreach ($produtos as $produto){
                    $eventoProduto = $this->container->get("agp.eventoProduto.manager")->findById(substr($produto, 0, strpos($produto, '-')));
                    
                    $habilita = $this->create();
                    $habilita->setTerminalEmpresa($terminalEmpresa)
                             ->setEvento($evento)
                             ->setOrdem($this->repository->getLastOrdem($terminalEmpresa)+1);    
                    $habilita->setLayout($terminalEmpresa->getEventoTerminalEmpresa($evento)->getLayout());
                    $habilita->setAtendente($terminalEmpresa->getEventoTerminalEmpresa($evento)->getAtendente());
                    $habilita->setListaPreco($eventoProduto->getListaPreco());
                    $habilita->setProduto($eventoProduto->getProduto());
                    $habilita->setVlrProduto($eventoProduto->getVlrProduto());
                    $habilita->setLimiteVendas($eventoProduto->getLimiteVendas());
                    $habilita->setTipo(HabilitaProdutoTerminal::TP_EVENTO);
                    $habilita->setEmpresa($user->getEmpresa());

                    if ($limpa == false){
                        $ordem = $this->repository->verificaProdutoEvento($eventoProduto->getProduto(), $terminalEmpresa, $evento);
                        
                        // Produto fica com a ordem do produto deletado
                        if ($ordem != null){
                            $habilita->setOrdem($ordem);
                        } 
                    } 
                    
                    $i++;
                    $this->persist($habilita);
                    //$this->addValidador($eventoProduto->getProduto(), $evento, $terminalEmpresa, $habilita);
                }
            }
        } 
    }
    
    public function changeSituacao($entity){
        
        if ($entity->isAtivo()){
            $entity->setSituacao(HabilitaProdutoTerminal::SIT_INATIVO);
        }else{
            $entity->setSituacao(HabilitaProdutoTerminal::SIT_ATIVO);
        }
        
        $this->update($entity);
        
    }
    
    public function habilitaPassaporte($terminais, $listas, $evento){
        
        $user = $this->container->get('security.context')->getToken()->getUser();
        foreach ($terminais as $terminalEmpresa){
            
//            if ($limpa == true){
//                $this->repository->clearProdutosHabilitados($terminalEmpresa, $user);
//            }
            
            $this->repository->clearProdutosHabilitadosBar($terminalEmpresa, $user);
            $this->container->get('doctrine')->getRepository("AgpCoreBundle:EventoTerminalEmpresa")->updateForHabilitado($terminalEmpresa, $evento);
            
            foreach ($listas as $lista){
                
                $this->container->get('agp.habilitaProdutoTerminal.repository')->clearByListasAndByTerminal($lista, $terminalEmpresa);
                
                $produtos = $this->container->get('agp.eventoProduto.repository')->getProdutosByLista($lista);
                
                foreach ($produtos as $p){
                    
                    // Este é configuração atual do terminal que esta sendo alterado
                    $eventoTerminalEmpresaAtual = $terminalEmpresa->getEventoTerminalEmpresa($evento);
                    $evento = $p->getEvento();
                    $eventoTerminalEmpresa = $terminalEmpresa->getEventoTerminalEmpresa($evento);
                    
                    if (!$eventoTerminalEmpresa){
                        $eventoTerminalEmpresa = new EventoTerminalEmpresa;
                        $eventoTerminalEmpresa->setEvento($evento);
                        $eventoTerminalEmpresa->setTerminalEmpresa($terminalEmpresa);
                        $eventoTerminalEmpresa->setSituacao('Ativo');
                        $eventoTerminalEmpresa->setAtendente($eventoTerminalEmpresaAtual->getAtendente());
                        $eventoTerminalEmpresa->setLayout($eventoTerminalEmpresaAtual->getLayout());
                        $this->em->persist($eventoTerminalEmpresa);
                        $terminalEmpresa->addEvento($eventoTerminalEmpresa);
                    }
                    
                    $habilita = $this->create();
                    $habilita->setTerminalEmpresa($terminalEmpresa)
                             ->setEvento($evento)
                             ->setOrdem($this->repository->getLastOrdem($terminalEmpresa)+1);    
                    $habilita->setLayout($terminalEmpresa->getEventoTerminalEmpresa($evento)->getLayout());
                    $habilita->setAtendente($terminalEmpresa->getEventoTerminalEmpresa($evento)->getAtendente());
                    $habilita->setListaPreco($p->getListaPreco());
                    $habilita->setProduto($p->getProduto());
                    $habilita->setVlrProduto($p->getVlrProduto());
                    $habilita->setLimiteVendas($p->getLimiteVendas());
                    $habilita->setTipo(HabilitaProdutoTerminal::TP_EVENTO);
                    $habilita->setEmpresa($user->getEmpresa());
                    $this->em->persist($habilita);
                }
                
            }
            
            $this->em->flush();

        }
        
    }
    
    public function habilitaAmbiente($terminais, $ambientes, $evento){
        
        $user = $this->container->get('security.context')->getToken()->getUser();
        foreach ($terminais as $terminalEmpresa){
 
            $this->repository->clearProdutosHabilitadosBar($terminalEmpresa, $user);
            $this->container->get('doctrine')->getRepository("AgpCoreBundle:EventoTerminalEmpresa")->updateForHabilitado($terminalEmpresa, $evento);
            
            foreach ($ambientes as $ambiente){
                
                $this->container->get('agp.habilitaProdutoTerminal.repository')->clearByAmbienteAndByTerminal($ambiente, $terminalEmpresa, $evento);
                
                //$listas = $this->container->get('agp.lista.repository')->getListasByAmbiente($ambiente);
                
                //foreach ($listas as $l){
                    $l = $ambiente->getSetores()->get(0);
                    $habilita = $this->create();
                    $habilita->setTerminalEmpresa($terminalEmpresa)
                             ->setEvento($evento)
                             ->setOrdem($this->repository->getLastOrdem($terminalEmpresa)+1);    
                    $habilita->setLayout($terminalEmpresa->getEventoTerminalEmpresa($evento)->getLayout());
                    $habilita->setAtendente($terminalEmpresa->getEventoTerminalEmpresa($evento)->getAtendente());
                    $habilita->setListaPreco($l);
                    //$habilita->setProduto($ambiente->getProduto());
                    //$habilita->setVlrProduto($ambiente->getProduto()->getVlrBase());
                    $habilita->setLimiteVendas(0);
                    $habilita->setTipo(HabilitaProdutoTerminal::TP_EVENTO);
                    $habilita->setEmpresa($user->getEmpresa());
                    $this->em->persist($habilita);
                //}
                
            }
            
            $this->em->flush();

        }
        
    }


//    public function addValidador($produto, $evento, $terminalEmpresa, $habilita){
//        
//        $maximoValid = $this->em->createQuery("SELECT MAX(av.codAutorizadorValidacao) FROM AgpCoreBundle:AutorizadorValidacao av")->getSingleScalarResult();
////        $stmt = $em->getConnection()->prepare("ALTER TABLE autorizador_validacao ALTER COLUMN cod_autorizador_Validacao AUTO INCREMENT = 1");
////        $stmt->execute();
////        
////        $stmt = $em->getConnection()->prepare("SHOW TABLE STATUS LIKE 'autorizador_validacao' ");
////        $stmt->execute();
////        $row = $stmt->fetch();
////        var_dump($row['Auto_increment']);
//        
//        //die();
//        
//        $auto = new AutorizadorValidacao;
//        $auto->setCodAutorizadorValidacao($maximoValid+1);
//        $auto->setEvento($evento);
//        $auto->setProduto($produto);
//        $auto->setTerminalEmpresa($terminalEmpresa);
//        $auto->setHabilita($habilita);
//        
//        
//        $this->em->persist($auto);
//        $this->em->flush();
//        
//        return $auto;
//    }
  
}

?>
